#ifndef __PVMDRIVER_WINMM_H__
#define __PVMDRIVER_WINMM_H__

#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
//////////////////////////////////////////////////////////////////////////
//system includes:
#include <windows.h>
#include <Mmsystem.h>


#include "lib/drivers/pvmdriver_softmix.h"

#include "lib/memory/pvmmemory.h"


class PVMDriverWinWaveOut : public IPVMDriverOutSimpleDevice, public PVMAllocableObject
{
public:
	PVMDriverWinWaveOut();
	virtual ~PVMDriverWinWaveOut();

	virtual pvm_bool Init();
	virtual void DriverClose();
	virtual pvm_bool IsInitialized();
	virtual pvm_uint32 GetDriverType();

	virtual pvm_bool GetDriverOption(const pvm_char* optionName, void* optionVal, pvm_uint32* optionSize);
	virtual pvm_bool SetDriverOption(const pvm_char* optionName, void* optionVal, pvm_uint32 optionSize);

	virtual pvm_uint32 DevicesNum();
	virtual pvm_int32 DeviceName(pvm_int32 nDevice, pvm_char* buffer, pvm_uint32 maxLength);

	virtual pvm_bool DeviceEnumModes(pvm_int32 nDeivce, TFormatEnumCallbackProc enumProc, void *param);

	virtual IPVMDeviceOutSimple* DeviceOpen(pvm_uint32 samplesPerSec, pvm_uint32 bitsPerSample, pvm_uint32 chanelsNum, pvm_int32 deviceNum, void *additionalInfo, pvm_uint32 infoSize, IPVMDeviceOutSimpleWaveSource *waveSource, pvm_bool deviceSuspended);
	virtual void CloseDevice(IPVMDeviceBase* device);
};

IPVMDriverOut* PVMDriverCreateWinWaveOut();
pvm_uint32 PVMDriverGetTypeAndFlagsWinWaveOut();

#endif
